目錄
這個實驗是接續 實驗:建立 API Gateway-using mock ,將整合模擬(MOCK)改為 AWS Lambda,透過 Lambda 回傳伺服器的日期與時間。
AWS Academy Learner Lab 是提供一個帳號讓學生可以自行使用 AWS 的服務,讓學生可以在 50 USD的金額下,自行練習所要使用的 AWS 服務,在此先介紹一下 Learner Lab 基本操作與限制。
在 AWS Academy 學習平台 的入口首頁 https://www.awsacademy.com/LMS_Login ,選擇以學生 (Students) 身分登錄,在課程選單中選擇 AWS Academy Learner Lab - Foundation Services 的課程,在課程選單中選擇 單元 (Module),接著單擊 啟動 AWS Academy Learner Lab,如下圖所示。
圖 1. 啟動 AWS Academy Learner Lab
進入 Learner Lab 中,說明一下每個區塊,圖形在下方。
圖 2. Learner Lab 畫面說明
進入 Lambda 控制台,建立一個新的 AWS Lambda 函數,配置如下:
圖 3. 建立 AWS Lambda 函數
在 Lambda 函數中撰寫要運行的程式碼,在程式碼頁簽中程式碼來源撰寫測試的程式。
取得時間的方式可以用世界協調時間(Coordinated Universal Time,簡稱UTC)是最主要的世界時間標準,它為當前時間建立了參考,形成了民用時間和時區的基礎。因為伺服器時間會因為所在區域不同而不一樣,所以需要根據台北時間(+8)來進行調整。
而回傳的回應需要加上標頭資訊:
import json
from datetime import datetime, timedelta
def lambda_handler(event, context):
datetime_format = "%Y-%m-%dT%H-%M-%S"
taipei_time = datetime.utcnow() + timedelta(hours=8)
timestamp_str = taipei_time.strftime(datetime_format)
resp_date = {
'date': timestamp_str.split('T')[0],
'time': timestamp_str.split('T')[-1]
}
return {
'statusCode': 200,
"headers": {
"Access-Control-Allow-Headers": 'Content-Type,X-Amz-Date,Authorization,X-Api-Key,X-Amz-Security-Token',
"Access-Control-Allow-Methods": 'GET',
"Access-Control-Allow-Origin": '*'
},
'body': json.dumps(resp_date)
}
編寫完成程式碼之後,由於還沒有部署,無法進行測試或者調用。部署類似於將程式碼同步到 Lambda 函數中,部署程式碼,點擊 Deploy,撰寫完程式碼之後需要部署程式碼,之後才能進行測試。
編寫完成程式碼並且部署成功之後,可以進行測試 / 調用 Lambda 函數,得到結果。
點擊Test
設定測試事件
圖 4. 設定測試事件
打開 API Gateway 控制台,選擇 dateAPI (實驗:建立 API Gateway-using mock 所建立的 REST API),選擇 DateInfo 資源中的 GET 方法,編輯整合需求。
圖 6. 編輯 GET 方法的整合需求
圖 7. 在 IAM 控制台找到 LabRole 的 ARN
圖 8. 更新 GET 方法的整合需求
測試
最後選擇測試觀看結果,如果正確會回應狀態200,以及指定的回應內文與回應標頭。
圖 9. 對於設定好的方法進行測試
在左側的資源選單中,可以找到資源畫面的右上方有 部署 API 按鈕,點擊後選擇階段名稱為 dev 後,進行部署。
完成部署後,選擇階段選單,找到叫用URL,並複製起來。
圖 10. 複製所需的 API 端點
將叫用URL貼在空白瀏覽器上,在瀏覽器上上測試 API 資源,如果出現日期資料,即表示 API Gateway 部署成功。
圖 11. 在瀏覽器上上測試 API 資源
進入 S3 控制台,找到 index.html 所在的網址,通常是
https://[bucketname].s3.amazonaws.com/[object]
圖 12. 檢視 index.html 網址
打開 index.html 網址並點擊 Load Information,可以看到下方會出現 ajax 呼叫 API Gateaway,來取得資料,並顯示在畫面上。可以重複點擊 Load Information,可以發現時間會持續更新,這表示是使用 AWS Lambda 函數,而不是使用模擬方法。
圖 13. 檢視網頁運作